﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ProcessoSeletivo.DAO;

public partial class admin_GabaritoCad : System.Web.UI.Page
{
    #region " Load "

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Necessário para burlar o bug de clicar no botão e após dar F5 o evento ser executado novamente
            Session["update"] = Server.UrlEncode(DateTime.Now.ToString());

            Session["Gabarito"] = null;
            DataView lDataView = null;

            if (Request["cod_processo_pro"] == null)
            {
                lblTitulo.Text = "Inclusão do Gabarito oficial";

                using (Gabarito objGab = new Gabarito())
                {
                    lDataView = objGab.ListarGabaritoPorInscricao(-1);
                }
            }
            else
            {
                lblTitulo.Text = "Alteração do Gabarito oficial";

                using (Gabarito objGab = new Gabarito())
                {
                    lDataView = objGab.ListarGabaritoPorProcesso(Convert.ToInt32(Request["cod_processo_pro"]));
                }

                if (lDataView.Table.Rows.Count > 0)
                {
                    cod_processo_pro.SelectedValue = lDataView.Table.Rows[0]["cod_processo_pro"].ToString();
                }
                else
                {
                    Response.Redirect("Gabarito.aspx");
                }
            }

            Session["Gabarito"] = lDataView.Table.DataSet;
            grvPrincipal.DataSource = lDataView;
            grvPrincipal.DataBind();
        }

        if (Request["cod_processo_pro"] != null)
        {
            cod_processo_pro.Enabled = false;
        }
    }

    //Necessário para burlar o bug de clicar no botão e após dar F5 o evento ser executado novamente
    protected void Page_PreRender(object sender, EventArgs e)
    {
        ViewState["update"] = Session["update"];
    }

    #endregion

    #region " Grid "

    protected void grvPrincipal_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataRowView lRow = (DataRowView)e.Row.DataItem;

            TextBox texto = (TextBox)e.Row.FindControl("num_questao_que");
            texto.Text = lRow["num_questao_que"].ToString();

            DropDownList combo = (DropDownList)e.Row.FindControl("des_letra_que");
            combo.SelectedValue = lRow["des_letra_que"].ToString();

            combo = (DropDownList)e.Row.FindControl("tip_questao_que");

            if (lRow["tip_questao_que"].ToString() != "")
            {
                combo.SelectedValue = lRow["tip_questao_que"].ToString();
            }
        }
    }

    #endregion

    #region " Botões "

    protected void btnSalvar_Click(object sender, EventArgs e)
    {
        //Necessário para burlar o bug de clicar no botão e após dar F5 o evento ser executado novamente
        if (Session["update"].ToString() == ViewState["update"].ToString())
        {
            Session["update"] = Server.UrlEncode(DateTime.Now.ToString());

            if (grvPrincipal.Rows.Count > 0)
            {
                DataSet lDataSet;
                int processo;

                if (Request["cod_processo_pro"] != null)
                {
                    processo = Convert.ToInt32(Request["cod_processo_pro"]);
                }
                else
                {
                    processo = Convert.ToInt32(cod_processo_pro.SelectedValue);
                }

                using (Gabarito objGab = new Gabarito())
                {
                    objGab.IncluirGabarito(processo, Session["des_login_usu"].ToString());
                }

                using (Questao objQuestao = new Questao())
                {
                    //Realiza a exclusão de todas as questões associadas a esse gabarito
                    objQuestao.ExcluirQuestaoPorProcesso(processo);

                    lDataSet = objQuestao.ConsultarQuestao(-1).Table.DataSet;
                }

                foreach (GridViewRow GridRow in grvPrincipal.Rows)
                {
                    DropDownList des_letra_que = (DropDownList)GridRow.FindControl("des_letra_que");
                    DropDownList tip_questao_que = (DropDownList)GridRow.FindControl("tip_questao_que");
                    TextBox num_questao_que = (TextBox)GridRow.FindControl("num_questao_que");

                    lDataSet.Tables[0].Rows.Add();

                    lDataSet.Tables[0].Rows[GridRow.RowIndex]["cod_processo_pro"] = processo;
                    lDataSet.Tables[0].Rows[GridRow.RowIndex]["num_questao_que"] = num_questao_que.Text;
                    lDataSet.Tables[0].Rows[GridRow.RowIndex]["des_letra_que"] = des_letra_que.SelectedValue;
                    lDataSet.Tables[0].Rows[GridRow.RowIndex]["tip_questao_que"] = tip_questao_que.SelectedValue;
                }

                using (Questao objQuestao = new Questao())
                {
                    objQuestao.IncluirQuestao(lDataSet);
                }

                Response.Redirect("Gabarito.aspx");
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "block", "alert('É necessário adicionar as questões!');", true);
            }
        }
    }

    protected void btnAdicionar_Click(object sender, EventArgs e)
    {
        //Necessário para burlar o bug de clicar no botão e após dar F5 o evento ser executado novamente
        if (Session["update"].ToString() == ViewState["update"].ToString())
        {
            Session["update"] = Server.UrlEncode(DateTime.Now.ToString());
            CarregarSession();

            if (Session["Gabarito"] != null && qtd_linhas.Text != "" && qtd_linhas.Text != "0")
            {
                DataSet lDataSet = (DataSet)Session["Gabarito"];

                for (int i = 0; i < Convert.ToInt32(qtd_linhas.Text); i++)
                {
                    lDataSet.Tables[0].Rows.Add(lDataSet.Tables[0].NewRow());
                    lDataSet.Tables[0].Rows[lDataSet.Tables[0].Rows.Count - 1]["num_questao_que"] = lDataSet.Tables[0].Rows.Count;
                }

                grvPrincipal.DataSource = lDataSet.Tables[0].DefaultView;
                grvPrincipal.DataBind();
            }
        }
    }

    protected void btnRemover_Click(object sender, EventArgs e)
    {
        //Necessário para burlar o bug de clicar no botão e após dar F5 o evento ser executado novamente
        if (Session["update"].ToString() == ViewState["update"].ToString())
        {
            Session["update"] = Server.UrlEncode(DateTime.Now.ToString());

            CarregarSession();
            DataSet lDataSet = (DataSet)Session["Gabarito"];
            List<int> Lista = new List<int>();
            string NaoExcluir = "";

            if (hfSelecionados.Value != "")
            {
                foreach (string item in hfSelecionados.Value.Split(';'))
                {
                    if (item != "")
                    {
                        int linha = Convert.ToInt32(item);

                        if (!Lista.Contains(linha))
                        {
                            Lista.Add(linha);
                        }
                    }
                }

                while (Lista.Count > 0)
                {
                    lDataSet.Tables[0].Rows.RemoveAt(Lista.Last());
                    Lista.RemoveAt(Lista.Count - 1);
                }

                Session["Gabarito"] = lDataSet;
                grvPrincipal.DataSource = lDataSet;
                grvPrincipal.DataBind();
            }
        }
    }

    #endregion

    #region " Métodos gerais "

    private void CarregarSession()
    {
        if (Session["Gabarito"] != null)
        {
            DataSet lDataSet = (DataSet)Session["Gabarito"];

            foreach (GridViewRow GridRow in grvPrincipal.Rows)
            {
                lDataSet.Tables[0].Rows[GridRow.RowIndex]["cod_processo_pro"] = cod_processo_pro.SelectedValue;
                lDataSet.Tables[0].Rows[GridRow.RowIndex]["cod_questao_que"] = grvPrincipal.DataKeys[GridRow.RowIndex].Value;

                TextBox texto = (TextBox)GridRow.FindControl("num_questao_que");
                lDataSet.Tables[0].Rows[GridRow.RowIndex]["num_questao_que"] = texto.Text;

                DropDownList combo = (DropDownList)GridRow.FindControl("des_letra_que");
                lDataSet.Tables[0].Rows[GridRow.RowIndex]["des_letra_que"] = combo.SelectedValue;

                combo = (DropDownList)GridRow.FindControl("tip_questao_que");
                lDataSet.Tables[0].Rows[GridRow.RowIndex]["tip_questao_que"] = combo.SelectedValue;
            }
        }
    }

    #endregion
}